<h2>Why is this an issue?</h2>
<p>Numbers can be shifted with the <code>&lt;&lt;</code> and <code>&gt;&gt;</code> <a
href="https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/bit-shift-operators">operators</a>, but the right operand of
the operation needs to be an <code>int</code> or a type that has an <a
href="https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/implicit-and-explicit-conversions">implicit
conversion</a> to <code>int</code>. However, when the left operand is an <code>object</code>, the compiler’s type checking is turned off, therfore you
can pass anything to the right of a shift operator and have it compile. If the argument can’t be implicitly converted to <code>int</code> at runtime,
a <a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.csharp.runtimebinder.runtimebinderexception">RuntimeBinderException</a> will be
raised.</p>
<pre>
Dim o As Object = 5
Dim x As Integer = 5

x = o &gt;&gt; 5 ' Noncompliant
x = x &lt;&lt; o ' Noncompliant
</pre>
<h3>Exceptions</h3>
<p>This rule does not raise when the left or the right expression is <a
href="https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/nothing">Nothing</a>.</p>
<pre>
x = Nothing &gt;&gt; 5
x = 5 &lt;&lt; Nothing
</pre>
<h2>Resources</h2>
<h3>Documentation</h3>
<ul>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/bit-shift-operators">Bit Shift Operators</a> </li>
  <li> <a
  href="https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/implicit-and-explicit-conversions">Implicit and Explicit Conversions</a> </li>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.csharp.runtimebinder.runtimebinderexception">RuntimeBinderException Class</a>
  </li>
</ul>

